package com.smartbus.bus.domain;

import java.math.BigDecimal;

/**
 * 换乘配置对象（临时函数替代，后续改为系统配置）
 *
 * @author smartbus
 * @date 2024-09-24
 */
public class TransferConfig
{
    /** 最大换乘次数 */
    private Integer maxTransferCount;

    /** 最大步行距离（公里） */
    private BigDecimal maxWalkingDistance;

    /** 最大步行时间（分钟） */
    private Integer maxWalkingTime;

    /** 每站平均时间（分钟） */
    private Integer avgTimePerStation;

    /** 换乘等待时间（分钟） */
    private Integer transferWaitTime;

    /** 返回结果数量限制 */
    private Integer resultLimit;

    /** 搜索超时时间（毫秒） */
    private Long searchTimeout;

    /**
     * 获取默认换乘配置
     */
    public static TransferConfig getDefault() {
        TransferConfig config = new TransferConfig();
        config.setMaxTransferCount(3); // 最多3次换乘
        config.setMaxWalkingDistance(new BigDecimal("1.0")); // 最远步行1公里
        config.setMaxWalkingTime(15); // 最长步行15分钟
        config.setAvgTimePerStation(2); // 每站平均2分钟
        config.setTransferWaitTime(5); // 换乘等待5分钟
        config.setResultLimit(5); // 最多返回5个方案
        config.setSearchTimeout(10000L); // 搜索超时10秒
        return config;
    }

    /**
     * 获取快速模式配置（优化时间）
     */
    public static TransferConfig getFastMode() {
        TransferConfig config = getDefault();
        config.setMaxTransferCount(2); // 最多2次换乘
        config.setMaxWalkingDistance(new BigDecimal("0.8")); // 最远步行800米
        config.setMaxWalkingTime(12); // 最长步行12分钟
        config.setTransferWaitTime(3); // 换乘等待3分钟
        return config;
    }

    /**
     * 获取舒适模式配置（减少步行）
     */
    public static TransferConfig getComfortMode() {
        TransferConfig config = getDefault();
        config.setMaxWalkingDistance(new BigDecimal("0.5")); // 最远步行500米
        config.setMaxWalkingTime(8); // 最长步行8分钟
        config.setTransferWaitTime(8); // 换乘等待8分钟
        return config;
    }

    public Integer getMaxTransferCount() {
        return maxTransferCount;
    }

    public void setMaxTransferCount(Integer maxTransferCount) {
        this.maxTransferCount = maxTransferCount;
    }

    public BigDecimal getMaxWalkingDistance() {
        return maxWalkingDistance;
    }

    public void setMaxWalkingDistance(BigDecimal maxWalkingDistance) {
        this.maxWalkingDistance = maxWalkingDistance;
    }

    public Integer getMaxWalkingTime() {
        return maxWalkingTime;
    }

    public void setMaxWalkingTime(Integer maxWalkingTime) {
        this.maxWalkingTime = maxWalkingTime;
    }

    public Integer getAvgTimePerStation() {
        return avgTimePerStation;
    }

    public void setAvgTimePerStation(Integer avgTimePerStation) {
        this.avgTimePerStation = avgTimePerStation;
    }

    public Integer getTransferWaitTime() {
        return transferWaitTime;
    }

    public void setTransferWaitTime(Integer transferWaitTime) {
        this.transferWaitTime = transferWaitTime;
    }

    public Integer getResultLimit() {
        return resultLimit;
    }

    public void setResultLimit(Integer resultLimit) {
        this.resultLimit = resultLimit;
    }

    public Long getSearchTimeout() {
        return searchTimeout;
    }

    public void setSearchTimeout(Long searchTimeout) {
        this.searchTimeout = searchTimeout;
    }
}